package com.linkai.onlinetool.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.linkai.onlinetool.entity.Answer;
import com.linkai.onlinetool.entity.Question;
import com.linkai.onlinetool.service.AnswerService;
import com.linkai.onlinetool.service.QuestionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

/**
 * @Description:
 * @Param:
 * @return:
 * @Author: 林凯
 * @Date: 2021/3/12
 */
@RestController
public class GuessController {

    @Autowired
    QuestionService questionService;

    @Autowired
    AnswerService answerService;

    // 记得处理跨域问题

    /**
     * @Description:
     * @Param: [data]
     * @return: java.lang.String
     * @Author: 林凯
     * @Date: 2021/3/12
     */
    @PostMapping("/guess/insert")
//    @CrossOrigin(value = "http://localhost:8080", maxAge = 1800, allowedHeaders = "*")
    @CrossOrigin(allowCredentials="true",maxAge = 3600)
    public String insertContent(@RequestBody HashMap<String, Object> data) {

        /*
            data：{questionContent="jacklin", obj=[{answerContents=111, isTrue=1}, {answerContents=222, isTrue=0}]}
            注意：answerContents 是字符串类型
                  isTrue 是 int 类型
                  插入数据库是要记得类型转换
        * */
        System.out.println(data);

        // 1. 将问题插入到问题表中，同时获得新增记录 id
        Question question = new Question(null, (String) data.get("questionContent"), new Date(), new Date());
        int insert = questionService.insert(question);
        // 我们在 xml 文件中设置了 selectKey，所以这里能够自己拿到新增的记录的主键id
        System.out.println("question.getQId = " + question.getQId());
        int insertQuestionId = question.getQId();

        // 2. 根据新增记录 id，将答案数据插入到数据库中
        Answer answer = null;
        ArrayList arrayList = (ArrayList) data.get("obj");

        for (int i = 0; i < arrayList.size(); i++) {
            // 2.1 先进行数据处理，new 一个 Answer 对象出来
            // 这里的值即包含字符串也包含数字，所以要写成 Object
            HashMap<String, Object> item = (HashMap<String, Object>) arrayList.get(i);
            System.out.println(item.get("answerContents"));
            // 先进行类型转换
            String answerContents = (String) item.get("answerContents");
            Integer isTrue = (Integer) item.get("isTrue");
            answer = new Answer(null, answerContents, insertQuestionId, isTrue, new Date(), new Date());
            System.out.println(answer);

            // 2.2 将 answer 插入数据库中
            Answer insert1 = answerService.insert(answer);
        }

        HashMap<Object, Object> result = new HashMap<>();
        result.put("statusCode", 200);
        result.put("statusText", "success");
        String resultStr = JSON.toJSONString(result);
        return resultStr;
    }


    /**
     * @Description:
     * @Param: []
     * @return: java.lang.String
     * @Author: 林凯
     * @Date: 2021/3/12
     */
    @GetMapping("/guess/select")
    @CrossOrigin(allowCredentials = "true", maxAge = 3600)
    public String getQuestion() {

        // 1. 从数据库中获取问题信息
        List<Question> questions = questionService.querryAll();
        System.out.println(questions);

        // 2. 从数据库中获取答案信息，将问题和答案意义匹配，存放到 Map 中，然后在存入 List 中
        // 2.1 存放结果的 List 集合，每一个元素代表一个题目和对应的答案，每一个元素是一个 HashMap
        ArrayList<Object> resultList = new ArrayList<>();

        for (int i = 0; i < questions.size(); i++) {
            // 2.2 临时变量，用来保存一个题目机器对应答案
            HashMap<Object, Object> questionAndAnswer = new HashMap<>();

            // 2.3 将题目内容存入 HashMap 中
            questionAndAnswer.put("question", questions.get(i).getQContent());

            // 2.4 将题目的答案存入 HashMap中
            int qId = questions.get(i).getQId();
            System.out.println("qid = " + qId);
            // 2.4.1 这里需要根据题目的id查询对应题目的答案
            List<Answer> tempAnswer = answerService.queryByQid(qId);
            System.out.println("tempAnswer = " + tempAnswer);
            questionAndAnswer.put("answer", tempAnswer);

            // 2.5 将这个临时 Map 存入结果集合中
            resultList.add(questionAndAnswer);
        }

        // 3. 将结果集合转换为JSON格式字符串
        String resultStr = JSONObject.toJSONString(resultList);
        System.out.println(resultStr);

        // 4. 返回结果
        return resultStr;
    }

}
